#ifndef ALIGN_H
#define ALIGN_H

#include "SteeringBehaviour.h"

namespace Engine
{
	namespace SteeringBehaviourTypes
	{
		const unsigned int ALIGN = Hash("Align");
	}

	class Align : public SteeringBehaviour
	{
		protected:
			float m_targetRadius;
			float m_slowRadius;
			float m_timeToTarget;

		public:
			virtual ~Align() {}
			
			//inherited from SteeringBehaviour
			void Update(SteeringOutput* output);
			const char* GetTypeName() const {return "Align";}
			unsigned int GetHash() const {return SteeringBehaviourTypes::ALIGN;}

			Align();
			//tolerance for align (target = target ~ .1 for example) in rads
			void SetTargetRadius(float t) {m_targetRadius = t;}
			//determines when the agent begins to slow down its rot as it gets close to target rot, in rads
			void SetSlowRadius(float s) {m_slowRadius = s;}
			//time to reach target rot once within the slow radius
			void SetTimeToTarget(float t) {m_timeToTarget = t;}

			float GetTargetRadius() const {return m_targetRadius;}
			float GetSlowRadius() const {return m_slowRadius;}
			float GetTimeToTarget() const {return m_timeToTarget;}
	};
}

#endif